package com.atguigu.tingshu;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
// @EnableScheduling // 开启定时任务
public class ServiceAlbumApplication {

    /**
     * 专辑微服务的启动类干了什么?springboot启动类的原理?
     * ssm框架问题:
     *      a.依赖: jar包多,版本多,版本冲突--->pom.xml文件
     *      b.配置文件: web.xml spring.xml springMVC.xml spring-mybatis.xml-->bean的定义太多
     springboot目的解决ssm框架问题
     * 1.起步依赖: pom.xml文件优化-->编译层面
     *      a.定义所有的版本号: 解决冲突问题
     *      b.官方将包进行整合,解决jar包太多问题
     * 2.自动配置/装配: bean的定义太多优化--运行层面
     * @param args: jvm参数-Xxs 512m -Xxm 512m
     */
    public static void main(String[] args) {
        /**
         * 1.spring: IOC控制反转--->bean对象的生命周期由spring框架管理--->容器(BeanFactory-ApplicationContext)
         *  bean的创建
         *  bean的存储(BeanFactory)和使用
         *  bean的销毁
         *  2.创建了一个容器,并且准备好了所有可能使用的bean对象
         *      a.创建一个空的容器对象
         *      b.将用户自定的bean实例化完成以后放入容器: controller service mapper
         *      c.将可能使用到的bean实例化完成以后放入容器
         *      原理:SpringBootApplication注解
         *      2.1 构建一个指定args的jvm启动
         *      2.2 加载启动类的字节码,通过反射实例化
         *      2.3 识别到SpringBootApplication注解,解析注解
         *          2.3.1 ComponentScan: 包扫描,完成自定义bean的实例化存入容器, 启动类所在的包和子包下所有类的所有(spring相关框架)注解
         *          2.3.2 SpringBootConfiguration: 标识启动类为一个配置类
         *          2.3.3 EnableAutoConfiguration(自动配置/装配):
         *              使用官方提供的自动配置包中定义的自动配置的全部的类,对每个尝试进行加载,
         *              A-在pom文件中依赖了哪些就会加载成功哪些
         *              B-把可能用的bean全部加载完成
         *              C-依据坐标完成bean的配置
         */
        SpringApplication.run(ServiceAlbumApplication.class, args);
    }



}
